#include <semaphore.h>
#include <pthread.h>


typedef struct DiscoDeArchivoConfig
{
char sNombre[25];
int Conectado;			/*se le carga VERDADERO ó FALSO*/

}discoDeArchivoConfig;

typedef struct valoresCHS
{
	int cabezal;
	int cilindros;
	int sectores;
}chs;


typedef struct ClienteConocido {
	int socketCliente;
	struct ClienteConocido * Sgt;
	struct ClienteConocido * Ant;
}cliente ;


typedef struct RespuestSinc 
{
	int operacion;
	int numeroSector;
	char data[512];	
	struct RespuestSinc * Sgt;
	struct RespuestSinc * Ant;
	
}respuestSinc;

typedef struct ColaSinc{

	int numElementos;
	sem_t semaphore;
	sem_t full;
	sem_t empty;
	
	respuestSinc * listaRespuestasSinc;
	respuestSinc * listaRespuestasSinc_Ult;
	
	struct ColaSinc* Sgt;
	
}colaSinc;


typedef struct ListaIDdescriptors 
{
	char sDescriptorID_delPedido[20];
	char discoAsignado[20];
	char sSocketPorElCualResponder[20]; 
	int socketPorElCualResponder; 
	int operacion;		
	int discosAEspejar;
	int numeroSector;
	char data[512];
	
	colaSinc* colaSincronizacion;
	colaSinc* colaSincronizacion_Ult;
	
	struct ListaIDdescriptors * Sgt;
	struct ListaIDdescriptors * Ant;
	
}pedido;



typedef struct DiscoConocido
{
	char sNombre[25];
	int Estado;
	int sectores;
	int pendings;

	int* iSocketArrayParaHDA;				
	int* iSocketHDAParaArray;				
	int iSocketHDAParaDA;					

	pthread_mutex_t mutex;
	
	pedido * listaPedidos;
	pedido * listaPedidos_Ult;

	struct DiscoConocido * Sgt;
	struct DiscoConocido * Ant;

}disco;


/*VARIABLES A ELIMINAR*/
struct ListaIDdescriptors  * colaGlobal	;
struct ListaIDdescriptors  * colaGlobal_Ult;
struct DiscoConocido * ListaDiscos;
struct DiscoConocido * ListaDiscos_Ult;
cliente * ListaClientes;
cliente * ListaClientes_Ult;
int iCantidadDeDAConectados;
int iCantidadDiscosDeArchivoConfig;
struct DiscoDeArchivoConfig *pDiscosDeArchivoConfig;
int Estado;
int SubEstado;
/*int ArrayCompleto;*/

